{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# XGBoost Parameter Tuning for RentListingInquries Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# path to where the data lies\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 49352 entries, 0 to 49351\n",
      "Columns: 228 entries, bathrooms to interest_level\n",
      "dtypes: float64(9), int64(219)\n",
      "memory usage: 85.8 MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 标签值y（用户对公寓感兴趣程度）有3类\n",
    "np.unique(train['interest_level'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将数据分割训练数据与测试数据\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 获取特征，标签\n",
    "y = train['interest_level']\n",
    "X = train.drop(['interest_level'], axis=1)\n",
    "\n",
    "# 由于数据集较大，在此随机采样30%的数据构建训练样本，其余作为测试样本\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.7, stratify=y)\n",
    "X_train = np.array(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((14805, 227), (34547, 227))"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape, X_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 3\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds = cv_folds.split(X_train,y_train),\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    #train_predprob = alg.predict_proba(X_train)\n",
    "    #logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "   #Print model report:\n",
    "   # print (\"logloss of train :\" )\n",
    "   # print logloss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 9}\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a1ca6ea20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a1c657cc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[20:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(20,cvresult.shape[0]+20)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(5, 5), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "根据运算结果得知，cv函数在 n_estimate=125 时停止，因此最佳值 n_estimate=125，此时测试集上test_mlogloss_mean=0.6161986"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
